草庐IT

Java Swingworker 和多线程

全部标签

c++ - 多线程中是否需要原子类型? (OS X, clang, c++11)

我试图证明不使用std::atomic是非常糟糕的主意s但我无法创建一个重现失败的示例。我有两个线程,其中一个执行:{foobar=false;}和另一个:{if(foobar){//...}}foobar的类型是bool或std::atomic_bool并初始化为true.我正在使用OSXYosemite,甚至尝试使用this通过CPU亲和性暗示我希望线程在不同的内核上运行的技巧。我在循环等中运行这样的操作,在任何情况下,执行时都没有明显的差异。我最终用clangclang-std=c++11-lstdc++-O3-Stest.cpp检查生成的程序集我看到read上的asm差异很小(

c++ - prctl(PR_SET_PDEATHSIG, SIGNAL) 在父线程退出时调用,而不是在父进程退出时调用

我有一个正在fork到子进程的进程。如果父进程存在,则子进程不应存在。因此,我在子进程中调用::prctl(PR_SET_PDEATHSIG,SIGKILL)以在父进程死亡时将其杀死。最终发生的事情是父线程调用pthread_exit,该线程最终成为杀死子进程的催化剂。这是我的代码:父类.cpp:#include#include#include#include#includevoid*run(void*ptr){std::cout子.cpp:#include#include#include#includeintmain(){std::cout在命令行中运行以下命令:$./parent同

Linux 查看进程PID和线程CPU和内存占用情况

1.找到进程号[root@localhost~]#ps-ef|grepredisredis14161010:15?00:00:02/www/server/redis/src/redis-server0.0.0.0:6379root1143610369010:52pts/000:00:00grep--color=autoredis2.查看CPU和内存[root@localhost~]#top-p1416#按H,继续按qTasks:1total,1running,0sleeping,0stopped,0zombie%Cpu(s):64.0us,5.4sy,0.0ni,30.6id,0.0wa,0.

c++ - 线程构造的性能成本 : missed optimisations and memory allocation

我们遇到了一种奇怪的现象,其中包含头文件会导致某些内存分配密集型工作负载的性能下降5-10%。这个头文件将一个线程池声明为一个全局变量。该线程池从未在应用程序中以任何容量(还)使用过。也就是说,除了在程序启动时创建这个静态线程池外,应用程序完全是单线程的。一旦标题被移除,性能损失就会消失。从一些研究来看,由于某些编译器优化不再可能,多线程应用程序似乎会导致一些性能损失。每当以任何形式或容量实例化与线程相关的构造时,是否有可能关闭此类优化?或者,由于在执行大量内存分配时性能损失似乎最为明显,编译器是否有可能在编译/链接阶段意识到线程构造已实例化,因此它切换到线程安全内存分配器?这发生在L

c++ - 从内存转储中找出线程消息队列中的消息计数

我知道在任何给定时间通过任何类型的WinAPI调用都无法确定线程队列中有多少消息。我有一个应用程序无法运行,因为PostMessage有时会失败(可能是由于队列增长到10000,尽管我不明白它怎么会增长到这么大)。这是一个间歇性问题,我在它发生的那一刻进行了几次内存转储。显然队列必须在某个地方,本文解释了如何获取它http://moyix.blogspot.com/2008_09_01_archive.htmlEachthreadinWindows(representedbythe_ETHREADstrucutre)hasafieldinitsThreadControlBlock(or

c++ - OpenCV C++ 多线程加速

对于以下代码,这里有一些上下文。Matimg0;//1280x960grayscale--timer.start();for(inti=0;iv;uchar*p=img0.ptr(i);for(intj=0;j和timer.start();concurrency::parallel_for(0,img0.rows,[&img0](inti){vectorv;uchar*p=img0.ptr(i);for(intj=0;j结果:Singlethread0.0458856Multithread0.0329856加速几乎不明显。我的处理器是Inteli53.10GHz内存8GBDDR3编辑我

c++ - 与神秘指针相关的多线程速度减慢

背景:所以我正在研究光线追踪器......为了构建空间分区方案,我最初有一些这样的代码:if(msize基本上,这个空间划分树构造完成后,光线遍历树寻找模型,这些模型都存储在一个大数组中。叶节点包含模型的指针数组。然后我意识到,嘿,我没有理由添加额外的间接级别;如果我正确地安排我的模型,我可以让叶节点直接指向大量模型。大数组中彼此相邻的模型都属于给定的叶节点,因此叶节点将包含指向模型的指针。所以我这样做了,并在其他一切保持不变的情况下对其进行了测试。现在人们会认为这显然会加快程序的速度。好吧,它确实加快了单线程版本的速度(大约10%),但它减慢了多线程版本的速度(大约15%!如果你正在

c++ - 如何使任何 C++ 库成为线程安全的?

首先,我对C++相当有经验,并且了解线程和线程同步的基础知识。我还想编写一个自定义内存分配器作为我的宠物项目,并且已经读到它们应该是线程安全的。我理解术语“线程安全”的含义,但我不知道如何使C++代码线程安全。是否有关于如何使代码线程安全的任何实用示例或教程?在内存分配器场景中,它是否本质上确保所有变异函数都被标记为临界区?或者还有其他原因? 最佳答案 与所有线程问题相同:确保当一个线程正在更改某些内容时,没有其他线程正在访问它。对于内存分配系统,我想您需要一种方法来确保您不会同时将同一block内存分配给2个线程。无论是通过包装整

c++ - C++多线程程序中的串行代码执行

问题:在多线程程序中是否可以保证代码一次只能在一个线程中执行?(或近似于此的东西)具体来说:我有一个ControllerM(它是一个线程)和线程A、B、C。我希望M能够决定允许谁运行。当线程完成(最终或暂时)时,控制权转移回M。原因:理想情况下,我希望A、B和C在自己的线程中执行代码,而其他线程未运行。这将使每个线程在暂停时保持其指令指针和堆栈,并在Controller将控制权交还给它们时从中断处重新开始。我现在在做什么:我已经编写了一些实际上可以执行此操作的代码-但我不喜欢它。在伪C中://ControllerM//dosomestuffUnlockMutex(mutex);do{}

c++ - 针对推送优化的线程安全 C/C++ 队列

我正在寻找针对推送操作优化的线程安全C/C++队列实现。我不介意pop操作是否阻塞,但我希望永远不会在推送端阻塞。让我解释一下为什么。我正计划为C#应用程序编写分析器,我将有多个线程将消息推送到单个调度程序线程。我不介意调度程序是否很快阻塞,但我想避免在推送端出现任何延迟。 最佳答案 您可以使用boost.lockfree.它在boostsandboxsvn中,计划与boost版本1.53或1.54一起发布,具体取决于boost.atomic是否及时发布。目前boost.lockfree依赖于std::atomic而不是boost.